--- iptraf-3.0.0/src/packet.c.interface	2005-09-13 08:42:54.000000000 +0200
+++ iptraf-3.0.0/src/packet.c	2008-04-22 15:27:30.000000000 +0200
@@ -102,11 +102,19 @@ unsigned short getlinktype(unsigned shor
         else if (strncmp(ifname, "tun", 3) == 0)
             result = LINK_ETHERNET;
         else if (strncmp(ifname, "vlan", 3) == 0)
-            result = LINK_VLAN;
+            result = LINK_ETHERNET;
+        else if (strncmp(ifname, "bond", 4) == 0)
+            result = LINK_ETHERNET;
         else if (strncmp(ifname, "brg", 3) == 0)
             result = LINK_ETHERNET;
         else if (strncmp(ifname, "tap", 3) == 0)
             result = LINK_ETHERNET;
+        else if (strncmp(ifname, "ctc", 3) == 0)
+            result = LINK_ETHERNET;
+        else if (strncmp(ifname, "hsi", 3) == 0)
+            result = LINK_ETHERNET;
+        else if (strncmp(ifname, "ath", 3) == 0)
+            result = LINK_ETHERNET;
         else if ((strncmp(ifname, "isdn", 4) == 0) && (isdn_fd != -1)) {
             isdnent = isdn_table_lookup(isdnlist, ifname, isdn_fd);
 
@@ -235,6 +243,7 @@ void adjustpacket(char *tpacket, unsigne
          */
         memmove(aligned_buf, *packet, min(SNAPSHOT_LEN, *readlen));
         *packet = aligned_buf;
+	break;
     default:
         *packet = (char *) NULL;        /* return a NULL packet to signal */
         break;                  /* an unrecognized link protocol */
@@ -344,9 +353,14 @@ int processpacket(char *tpacket, char **
      * Get IPTraf link type based on returned information and move past
      * data link header.
      */
-    *linktype =
-        getlinktype(fromaddr->sll_hatype, ifname, isdnfd, &isdntable);
     fromaddr->sll_protocol = ntohs(fromaddr->sll_protocol);
+    if (fromaddr->sll_protocol != ETH_P_8021Q)
+        *linktype =
+            getlinktype(fromaddr->sll_hatype, ifname, isdnfd, &isdntable);
+    else {
+        *linktype = LINK_VLAN;
+        fromaddr->sll_protocol = ntohs(*((unsigned short*)(tpacket+ETH_HLEN+2)));
+    }
     adjustpacket(tpacket, *linktype, packet, aligned_buf, br);
 
     if (*packet == NULL)
--- iptraf-3.0.0/src/ifaces.c.interface	2005-09-13 08:42:54.000000000 +0200
+++ iptraf-3.0.0/src/ifaces.c	2008-04-22 15:35:40.000000000 +0200
@@ -32,14 +32,15 @@ details.
 #include "error.h"
 
 extern int accept_unsupported_interfaces;
-#define NUM_SUPPORTED_IFACES 26
+#define NUM_SUPPORTED_IFACES 30
 
 extern int daemonized;
 
 char ifaces[][6] =
     { "lo", "eth", "sl", "ppp", "ippp", "plip", "fddi", "isdn", "dvb",
     "pvc", "hdlc", "ipsec", "sbni", "tr", "wvlan", "wlan", "sm2", "sm3",
-    "pent", "lec", "brg", "tun", "tap", "cipcb", "tunl", "vlan"
+    "pent", "lec", "brg", "tun", "tap", "cipcb", "tunl", "vlan", "hsi",
+    "ctc", "ath", "bond"
 };
 
 char *ltrim(char *buf)

